package cn.com.anysdk.redis.api;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * Redis 服务接口
 */
public interface IRedisService {
    // 基础操作
    void set(String key, String value);
    void set(String key, String value, long timeout, TimeUnit unit);
    String get(String key);
    Boolean delete(String key);
    Boolean exists(String key);
    Long expire(String key, long timeout, TimeUnit unit);
    
    // 哈希操作
    void hset(String key, String field, String value);
    String hget(String key, String field);
    Map<String, String> hgetAll(String key);
    Long hdel(String key, String... fields);
    Boolean hexists(String key, String field);
    
    // 列表操作
    Long lpush(String key, String... values);
    Long rpush(String key, String... values);
    String lpop(String key);
    String rpop(String key);
    List<String> lrange(String key, long start, long end);
    Long llen(String key);
    
    // 集合操作
    Long sadd(String key, String... members);
    Set<String> smembers(String key);
    Boolean sismember(String key, String member);
    Long srem(String key, String... members);
    
    // 有序集合操作
    Long zadd(String key, double score, String member);
    Set<String> zrange(String key, long start, long end);
    Set<String> zrevrange(String key, long start, long end);
    Long zrem(String key, String... members);
    
    // 分布式锁
    boolean tryLock(String key, String value, long timeout, TimeUnit unit);
    boolean releaseLock(String key, String value);
    
    // 批量操作
    void pipeline(PipelineCallback callback);
    
    // 事务操作
    void transaction(TransactionCallback callback);
    
    // 脚本操作
    Object eval(String script, List<String> keys, List<String> args);
    
    // 连接池操作
    void close();
} 